﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using PloobsEngine.Commands;
using PloobsEngine.Entity;
using PloobsEngine.Publishers;

namespace PloobsEngine.Components
{
    /// <summary>
    /// Interface do Componente
    /// Os componentes podem RECEBER Commands e enviar Mensagens (eles nao devem receber mensagens a priori)
    /// </summary>
    public interface IComponent : IReciever , IEntity , ISubject
    {
        void Initialize();
        void Update(GameTime gt);
        void PreDraw(GameTime gt, Matrix activeView, Matrix activeProjection);
        void AfterDraw(GameTime gt, Matrix activeView, Matrix activeProjection);
        void LoadContent(EngineStuff engine);
        ComponentType ComponentType
        {
            get;
        }

    }

    public enum ComponentType
    {
        PRE_DRAWABLE, POS_DRAWABLE, UPDATEABLE, PRE_DRAWABLE_AND_UPDATEABLE, POS_DRAWABLE_AND_UPDATEABLE, NONE
    }
}
